WebSocket একটি পূর্ণ-ডুপ্লেক্স (Full-Duplex) যোগাযোগ প্রোটোকল যা ক্লায়েন্ট এবং সার্ভারের মধ্যে দীর্ঘস্থায়ী সংযোগ স্থাপন করে। এটি একটি হালকা, দ্রুত এবং স্থিতিশীল প্রোটোকল যা real-time অ্যাপ্লিকেশন যেমন চ্যাট অ্যাপ্লিকেশন, লাইভ ডেটা ফিড, এবং গেমিং সার্ভিসের জন্য উপযুক্ত।
Spring Boot ব্যবহার করে WebSocket ক্লায়েন্ট তৈরি করা বেশ সহজ, এবং এতে Spring WebSocket স্টার্টার ডিপেনডেন্সি ব্যবহার করা হয়।
প্রথমে আপনার pom.xml
বা build.gradle
ফাইলে WebSocket ডিপেনডেন্সি যোগ করতে হবে।
Maven:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
Gradle:
implementation 'org.springframework.boot:spring-boot-starter-websocket'
Spring Boot এ WebSocket ক্লায়েন্ট তৈরি করার জন্য WebSocketStompClient
ব্যবহার করা হয়। এটি একটি স্টম্প (STOMP) প্রোটোকল ব্যবহার করে সার্ভারের সাথে সংযোগ স্থাপন করতে সহায়ক।
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.client.WebSocketClient;
import org.springframework.web.socket.client.standard.StandardWebSocketClient;
import org.springframework.web.socket.WebSocketHandler;
@Configuration
public class WebSocketConfig {
@Bean
public WebSocketClient webSocketClient() {
return new StandardWebSocketClient();
}
@Bean
public WebSocketHandler webSocketHandler() {
return new MyWebSocketHandler();
}
}
WebSocketHandler
একটি কাস্টম ক্লাস হতে পারে যা WebSocket মেসেজ প্রক্রেসিং এবং ইভেন্ট হ্যান্ডলিং করে।
import org.springframework.web.socket.WebSocketMessage;
import org.springframework.web.socket.handler.TextWebSocketHandler;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
public class MyWebSocketHandler extends TextWebSocketHandler {
@Override
public void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
// মেসেজ রিসিভ করা
System.out.println("Received message: " + message.getPayload());
// মেসেজ পাঠানো
session.sendMessage(new TextMessage("Hello from WebSocket Client"));
}
}
এখন, আপনি WebSocketClient
ব্যবহার করে WebSocket সার্ভারে সংযোগ স্থাপন করবেন।
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.socket.client.WebSocketClient;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.TextMessage;
@Service
public class WebSocketClientService {
private final WebSocketClient webSocketClient;
@Autowired
public WebSocketClientService(WebSocketClient webSocketClient) {
this.webSocketClient = webSocketClient;
}
public void connectToWebSocketServer(String uri) throws Exception {
WebSocketSession session = webSocketClient.doHandshake(new MyWebSocketHandler(), uri).get();
System.out.println("Connected to WebSocket server");
// মেসেজ পাঠানো
session.sendMessage(new TextMessage("Hello, WebSocket Server!"));
}
}
এটি doHandshake()
মেথডের মাধ্যমে সার্ভারের সাথে সংযোগ স্থাপন করে এবং তারপর একটি টেক্সট মেসেজ পাঠায়।
এখন, আপনার WebSocket ক্লায়েন্ট WebSocketClientService
ক্লাসের মাধ্যমে WebSocket সার্ভারের সাথে যোগাযোগ শুরু করতে পারে।
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
@Component
public class WebSocketRunner implements CommandLineRunner {
private final WebSocketClientService webSocketClientService;
public WebSocketRunner(WebSocketClientService webSocketClientService) {
this.webSocketClientService = webSocketClientService;
}
@Override
public void run(String... args) throws Exception {
String serverUri = "ws://localhost:8080/socket";
webSocketClientService.connectToWebSocketServer(serverUri);
}
}
এই ক্লাসটি Spring Boot অ্যাপ্লিকেশন চালু হলে WebSocket সার্ভারের সাথে সংযোগ স্থাপন করবে।
Spring WebSocket এর সাথে STOMP প্রোটোকল ব্যবহার করে WebSocket ক্লায়েন্টের মাধ্যমে মেসেজ আদান-প্রদান আরও সহজ করা যায়। STOMP একটি উচ্চ স্তরের প্রোটোকল যা মেসেজ ব্রোকারের সাহায্যে সার্ভারের সাথে মেসেজ আদান-প্রদান সহজ করে।
WebSocketStompClient
তৈরি করা:
import org.springframework.web.socket.client.WebSocketStompClient;
import org.springframework.web.socket.stomp.StompSession;
import org.springframework.messaging.simp.stomp.StompHeaders;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.client.WebSocketClient;
import org.springframework.web.socket.client.standard.StandardWebSocketClient;
@Bean
public WebSocketStompClient stompClient() {
return new WebSocketStompClient(webSocketClient());
}
WebSocket সার্ভারে STOMP মেসেজ পাঠানো:
@Autowired
private WebSocketStompClient stompClient;
public void sendMessage() {
String serverUri = "ws://localhost:8080/ws";
StompSession session = stompClient.connect(serverUri, new MyStompSessionHandler()).get();
// মেসেজ পাঠানো
session.send("/app/hello", "Hello from STOMP Client".getBytes());
}
STOMP Session Handler:
import org.springframework.messaging.simp.stomp.StompSessionHandler;
import org.springframework.messaging.simp.stomp.StompCommand;
import org.springframework.messaging.simp.stomp.StompHeaders;
import org.springframework.messaging.simp.stomp.StompFrame;
public class MyStompSessionHandler implements StompSessionHandler {
@Override
public void handleFrame(StompHeaders headers, Object payload) {
System.out.println("Received message: " + new String((byte[]) payload));
}
@Override
public void handleException(StompHeaders headers, StompCommand command, String message, Throwable ex) {
System.out.println("Exception: " + message);
}
}
WebSocket ক্লায়েন্টে সাধারণত error handling এবং disconnect ম্যানেজমেন্ট করার জন্য কিছু অতিরিক্ত লজিক যুক্ত করা হয়।
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
System.out.println("Connection closed: " + status);
}
@Override
public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
System.err.println("Error occurred: " + exception.getMessage());
}
Spring Boot-এ WebSocket ক্লায়েন্ট তৈরি করার মাধ্যমে আপনি real-time অ্যাপ্লিকেশন তৈরি করতে পারেন যা দ্রুত এবং স্থিতিশীল ডেটা আদান-প্রদান সক্ষম করে। WebSocket ক্লায়েন্ট তৈরি করার জন্য Spring WebSocket এবং STOMP ব্যবহার করা সহজ এবং কার্যকর, যা আপনার মাইক্রোসার্ভিস বা চ্যাট অ্যাপ্লিকেশন এর মত রিয়েল-টাইম সিস্টেমগুলির জন্য আদর্শ।
Read more